﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace hse_2013_twinpics
{
    public partial class MainForm : Form
    {
        private Image[] Immas; // Массив для лицевых картинок
        
        // поля и метод для случайной привязки
        List<int> Genered;
        bool prove=true;
        private bool QuestCont(List<int> list, bool prove, Elementpic obj)
        {
            int counter=0;
            for (int i = 0; i < list.Count; i++)
                if (list[i] == obj.PicIndex)
                    counter++;
            if (counter == 2)
                prove = true;
            else
                prove = false;
            return prove;
        }

        // Размер поля для игры, просьба не менять, значение не влияет на размер формы
        const int FieldSize=4;

        // Массив картинок на поле
        private Elementpic[,] ElementPics;

        private void Pic_Click(object sender, EventArgs e)
        {
            MessageBox.Show(((Elementpic)sender).PicIndex.ToString()); // Заглушка, выводит индекс картинки
            /*
             * Здесь вся обработка свойств, переворачивание, сравнивание - ссылки на методы в элементпик
             */
        }

        public static void KnuthShuffle<Image>(Image[] array) // Перемешивание массива
        {
            System.Random random = new System.Random();
            for (int i = 0; i < array.Length; i++)
            {
                int j = random.Next(array.Length);
                Image temp = array[i]; 
                array[i] = array[j]; 
                array[j] = temp;
            }
        }


        public MainForm()
        {
            InitializeComponent();

            Immas = new Image[8];
            Immas[0] = Image.FromFile(@"C:\Users\Илья\Desktop\Новая папка\hse-2013-twinpics\Resources\p0.jpg");
            Immas[1] = Image.FromFile(@"C:\Users\Илья\Desktop\Новая папка\hse-2013-twinpics\Resources\p1.jpg");
            Immas[2] = Image.FromFile(@"C:\Users\Илья\Desktop\Новая папка\hse-2013-twinpics\Resources\p2.jpg");
            Immas[3] = Image.FromFile(@"C:\Users\Илья\Desktop\Новая папка\hse-2013-twinpics\Resources\p3.jpg");
            Immas[4] = Image.FromFile(@"C:\Users\Илья\Desktop\Новая папка\hse-2013-twinpics\Resources\p4.jpg");
            Immas[5] = Image.FromFile(@"C:\Users\Илья\Desktop\Новая папка\hse-2013-twinpics\Resources\p5.jpg");
            Immas[6] = Image.FromFile(@"C:\Users\Илья\Desktop\Новая папка\hse-2013-twinpics\Resources\p6.jpg");
            Immas[7] = Image.FromFile(@"C:\Users\Илья\Desktop\Новая папка\hse-2013-twinpics\Resources\p7.jpg");

            KnuthShuffle(Immas); // перемешиваем массив картинок, теперь каждый ПикИндекс будет соответствовать случайной картинке из Иммас

            ElementPics = new Elementpic[FieldSize,FieldSize]; // Создаем массив под картинки
            Genered = new List<int>();
            Random gen = new Random();
            for (int i = 0; i < FieldSize; i++)
                for (int j = 0; j < FieldSize; j++)
                {   // Заполняем массив картинок
                    prove = true;
                    ElementPics[i, j] = new Elementpic(i*FieldSize+j);
                    ((System.ComponentModel.ISupportInitialize)(this.ElementPics[i, j])).BeginInit();
                    ElementPics[i, j].Image = Properties.Resources.cover;
                    ElementPics[i, j].Location = new Point(i*70+6, j*70+28);
                    ElementPics[i, j].Name = "Im"+i.ToString()+j.ToString();
                    ElementPics[i, j].Size = new Size(64, 64);
                    ElementPics[i, j].TabIndex = 0;
                    ElementPics[i, j].TabStop = false;
                    ElementPics[i, j].Click += new EventHandler(this.Pic_Click);
                    while (prove)
                    {
                        ElementPics[i, j].PicIndex = gen.Next(0, 8);
                        prove = QuestCont(Genered, prove, ElementPics[i, j]);
                        if (!prove)
                            Genered.Add(ElementPics[i,j].PicIndex);
                    }
                    ((System.ComponentModel.ISupportInitialize)(this.ElementPics[i, j])).EndInit();
                    this.Controls.Add(ElementPics[i, j]);
                }

        }
    }
}
